package Domein;


import java.io.Serializable;
import javax.swing.JPasswordField;



/**
 *
 * @author Tim
 */
public class Speler implements Serializable {
    private static final long serialVersionUID = 10;
    int huisnummer, wins = 0, rounds = 0;
    boolean gewonnen = false, gespeeld = false;
    String gebruikersnaam,naam,tussenvoegsel,achternaam,geboortedatum,straat,postcode,woonplaats,wachtwoord,toevoeging,land;
    double saldo;


    /**
     *
     */
    public Speler() {
        
    }
    
    /**
     *
     * @return
     */
    public String getAchternaam() {
        return achternaam;
    }

    /**
     *
     * @param achternaam
     * @throws java.lang.Exception
     */
    public void setAchternaam(String achternaam) throws Exception {
        if(achternaam.length() <= 1){
            throw new Exception("- U achternaam is niet ingevuld.");
        }
        this.achternaam = achternaam;
    }

    /**
     *
     * @return
     */
    public String getGeboortedatum() {
        return geboortedatum;
    }

    /**
     *
     * @param geboortedatum
     * @throws java.lang.Exception
     */
    public void setGeboortedatum(String geboortedatum) throws Exception {
        if(geboortedatum.length() <= 1){
            throw new Exception("- uw geboortedatum is niet ingevuld.");
        }
        this.geboortedatum = geboortedatum;
    }

    /**
     *
     * @return
     */
    public String getGebruikersnaam() {
        return gebruikersnaam;
    }

    /**
     *
     * @param gebruikersnaam
     * @throws java.lang.Exception
     */
    public void setGebruikersnaam(String gebruikersnaam) throws Exception {
        if(gebruikersnaam.length() <= 1){
            throw new Exception("- Gebruikernaam is niet ingevuld.");
        }
        this.gebruikersnaam = gebruikersnaam;
    }

    /**
     *
     * @return
     */
    public int getHuisnummer() {
        return huisnummer;
    }

    /**
     *
     * @param huisnummer
     * @throws java.lang.Exception
     */
    public void setHuisnummer(String huisnummer) throws Exception {
        if(huisnummer.length() < 1){
            throw new Exception("- Huisnummer is niet ingevuld.");
        }
        try{
        this.huisnummer = Integer.parseInt(huisnummer);
        }
        catch(NumberFormatException e){
            throw new Exception("- Het huisnummer moet een getal zijn.");
        }


    }

    /**
     *
     * @return
     */
    public String getNaam() {
        return naam;
    }

    /**
     *
     * @param naam
     * @throws java.lang.Exception
     */
    public void setNaam(String naam) throws Exception {
        if(naam.length() <= 1){
            throw new Exception("- U dient een naam in te vullen.");
        }
        this.naam = naam;
    }

    /**
     *
     * @return
     */
    public String getPostcode() {
        return postcode;
    }

    /**
     *
     * @param postcode
     * @throws java.lang.Exception
     */
    public void setPostcode(String postcode) throws Exception {
        if(postcode.length() <= 1){
            throw new Exception("- U dient een naam in te vullen.");
        }
        this.postcode = postcode;
    }

    /**
     *
     * @return
     */
    public double getSaldo() {
        return saldo;
    }

    /**
     *
     * @param saldo
     * @throws java.lang.Exception
     */
    public void setSaldo(String saldo) throws Exception {
        try{
        double doubleSaldo = Double.parseDouble(saldo);
        if(doubleSaldo < 0){
            throw new Exception("- Het saldo moet een positief getal zijn.");
        }

        this.saldo += doubleSaldo;
        }
        catch(NumberFormatException ex){throw new Exception("- Het saldo moet een getal zijn.");}
        
        
    }

    /**
     *
     * @return
     */
    public String getStraat() {
        return straat;
    }

    /**
     *
     * @param straat
     * @throws java.lang.Exception
     */
    public void setStraat(String straat) throws Exception {
        if(straat.length() <= 1){
            throw new Exception("- U dient een straat in te vullen.");
        }
        this.straat = straat;
    }

    /**
     *
     * @return
     */
    public String getTussenvoegsel() {
        return tussenvoegsel;
    }

    /**
     *
     * @param tussenvoegsel
     * @throws java.lang.Exception
     */
    public void setTussenvoegsel(String tussenvoegsel) throws Exception {
        this.tussenvoegsel = tussenvoegsel;
    }

    /**
     *
     * @param password
     * @return
     */
    public boolean wachtwoordControlleren(char[] password) {
        int chars = password.length;
        String pw = "";
        for(int i = 0; i < chars;i++) {
            pw += Character.toString(password[i]);
        }
        pw = Domein.MD5.genMD5(pw);
        if(pw.equals(wachtwoord)) {
            return true;
        }
        return false;
    }

    /**
     *
     * @param gebruikersnaam
     * @param wachtwoord
     * @throws java.lang.Exception
     */
    public void getWachtwoord(String gebruikersnaam,JPasswordField wachtwoord) throws Exception {
            if(!gebruikersnaam.equals(this.getGebruikersnaam())){
                throw new Exception("- Uw gebruikernaam komt niet in onze database voor.");
            }
            int chars = wachtwoord.getPassword().length;
            String pw = "";
            for(int i = 0; i < chars;i++) {
                pw += Character.toString(wachtwoord.getPassword()[i]);
            }
            if(!this.wachtwoord.trim().equals(Domein.MD5.genMD5(pw).trim())){
                throw new Exception("- Uw wachtwoord is onjuist.");
            }
             
    }

    /**
     *
     * @param wachtwoord
     * @param wachtwoordControle
     * @throws java.lang.Exception
     */
    public void setWachtwoord(JPasswordField wachtwoord,JPasswordField wachtwoordControle) throws Exception {
        if(wachtwoord.getPassword().length < 8){
            throw new Exception("- U dient een wachtwoord van minimaal 8 tekens op te geven.");
        }
        int chars = wachtwoord.getPassword().length;
            String pw = "";
            for(int i = 0; i < chars;i++) {
                pw += Character.toString(wachtwoord.getPassword()[i]);
            }
        int charsc = wachtwoordControle.getPassword().length;
            String pwc = "";
            for(int i = 0; i < charsc;i++) {
                pwc += Character.toString(wachtwoordControle.getPassword()[i]);
            }
            if(!Domein.MD5.genMD5(pwc).trim().equals(Domein.MD5.genMD5(pw).trim())){
                throw new Exception("- De opgegeven wachtwoorden komen niet overeen.");
            }
        this.wachtwoord = MD5.genMD5(pw);
    }

    /**
     *
     * @return
     */
    public String getWoonplaats() {
        return woonplaats;
    }

    /**
     *
     * @param woonplaats
     * @throws java.lang.Exception
     */
    public void setWoonplaats(String woonplaats) throws Exception {
        if(woonplaats.length() <= 1){
            throw new Exception("- U dient een woonplaats in te vullen.");
        }
        this.woonplaats = woonplaats;
    }

    // Het berekenen van de winst/verlies verhouding
    /**
     *
     * @return
     */  
    public double getRation(){
        if (gewonnen){
            rounds = rounds + 1;
            wins = wins + 1;
            gewonnen = false;
        }
        if (gespeeld){
            rounds = rounds + 1;
            gespeeld = false;
        }
        System.out.println("gespeeld: "+rounds);
        System.out.println("wins: "+wins);
        if (rounds > 0)
            return rounds/wins;
        return 0.0;
    }

    /**
     *
     * @return
     */
    public String getToevoeging(){
        return toevoeging;
    }

    /**
     *
     * @param toevoeging
     * @throws java.lang.Exception
     */
    public void setToevoeging(String toevoeging) throws Exception  {
        this.toevoeging = toevoeging;
    }

    /**
     *
     * @return
     */
    public String getLand() {
        return land;
    }

    /**
     *
     * @param land
     * @throws java.lang.Exception
     */
    public void setLand(String land) throws Exception{
        if(land.length() <= 1){
            throw new Exception("- U dient een land in te vullen.");
        }
        this.land = land;
    }


}
